package pl.jdeveloper.derivato.model;

import pl.jdeveloper.derivato.exc.DerivationException;


public interface Differentiable {
	
	/**
	 * Metoda oblicza pochodną funkcji w punkcie obliczoną ilorazem różnicowym wstecznym
	 * @param arg punkt różniczkowania
	 * @param h krok różniczkowania
	 * @param n stopień pochodnej
	 * @return pochodna stopnia n w punkcie arg dla kroku różniczkowania h
	 * @throws DerivationException 
	 */
	public double derivBack(double arg, double h, int n) throws DerivationException;
	/**
	 * Metoda obliczająca pochodną funkcji w punkcie obliczoną ilorazem różnicowym progresywnym
	 * @param arg punkt różniczkowania
	 * @param h krok różniczkowania
	 * @param n stopień pochodnej
	 * @return pochodna stopnia n w punkcie arg dla kroku różniczkowania h
	 */
	public double derivForward(double arg, double h, int n) throws DerivationException;
	/**
	 * Metoda obliczająca pochodną funkcji w punkcie obliczoną ilorazem różnicowym centralnym
	 * @param arg punkt różniczkowania
	 * @param h krok różniczkowania
	 * @param n stopień pochodnej
	 * @return pochodna stopnia n w punkcie arg dla kroku różniczkowania h
	 * @throws DerivationException 
	 */
	public double derivCentral(double arg, double h, int n) throws DerivationException;
}
